#include "CProc.h"
#include "CMsg.h"

std::list<CMsg*> CProc::m_lMsg;

void CProc::Add(CMsg * msg) {
  m_lMsg.push_back(msg);
}

void CProc::Remove(CMsg * msg) {
  for (auto msg : m_lMsg) {
    if (msg->GetHandle() == msg->GetHandle()) {
      m_lMsg.remove(msg);
      return;
    }
  }
}

LRESULT CProc::Dispatch(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  for (auto msg : m_lMsg) {
    if (uMsg == WM_COMMAND) {
      msg->OnMessage(uMsg, wParam, lParam);
    } else if (hWnd == msg->GetHandle()) {
      return msg->OnMessage(uMsg, wParam, lParam);
    } else if (msg->GetHandle() == NULL) {
      if (uMsg == WM_CREATE) {
        msg->SetHandle(hWnd);
        return msg->OnMessage(uMsg, wParam, lParam);
      } else if (uMsg == WM_INITDIALOG) {
        msg->SetHandle(hWnd);
        return msg->OnMessage(uMsg, wParam, lParam);
      }
    }
  }
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

